package com.zliblike_platform.mapper;

import com.zliblike_platform.entity.BookList;
import com.zliblike_platform.vo.BookListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 书单Mapper接口
 */
@Mapper
public interface BookListMapper {
    
    /**
     * 插入书单
     * @param bookList 书单
     * @return 受影响的行数
     */
    int insert(BookList bookList);
    
    /**
     * 更新书单
     * @param bookList 书单
     * @return 受影响的行数
     */
    int update(BookList bookList);
    
    /**
     * 更新书单中的书籍数量
     * @param listId 书单ID
     * @return 受影响的行数
     */
    int updateBookCount(@Param("listId") Long listId);
    
    /**
     * 查询公开的书单（分页）
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 书单列表
     */
    List<BookListVO> selectPublicWithPagination(
            @Param("offset") Integer offset, 
            @Param("limit") Integer limit);
    
    /**
     * 查询公开书单总数
     * @return 总数
     */
    Integer countPublic();
    
    /**
     * 查询用户的书单（分页）
     * @param userId 用户ID
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 书单列表
     */
    List<BookListVO> selectByUserIdWithPagination(
            @Param("userId") Long userId,
            @Param("offset") Integer offset, 
            @Param("limit") Integer limit);
    
    /**
     * 查询用户的书单总数
     * @param userId 用户ID
     * @return 总数
     */
    Integer countByUserId(@Param("userId") Long userId);
    
    /**
     * 根据ID查询书单
     * @param listId 书单ID
     * @return 书单
     */
    BookListVO selectById(@Param("listId") Long listId);
    
    /**
     * 删除书单
     * @param listId 书单ID
     * @param userId 用户ID（确保只能删除自己的书单）
     * @return 受影响的行数
     */
    int deleteById(@Param("listId") Long listId, @Param("userId") Long userId);
} 